package com.fengkai.filepost.pdfoutstream.test.common.mq.translation;

import com.alibaba.druid.util.StringUtils;
import org.apache.rocketmq.client.producer.LocalTransactionState;
import org.apache.rocketmq.client.producer.TransactionListener;
import org.apache.rocketmq.common.message.Message;
import org.apache.rocketmq.common.message.MessageExt;

/**
 * @author Fengkai
 * @creat 2021/12/30
 */
public class ICBCTransactionListener implements TransactionListener {
    // 回调操作方法
    // 消息预提交成功就会触发该方法的执行，用于完成本地事务
    @Override
    public LocalTransactionState executeLocalTransaction (Message message, Object o) {
    // 假设接收到TAGA的消息就表示扣款操作成功，TAGB的消息表示扣款失败，
    // TAGC表示扣款结果不清楚，需要执行消息回查
        if (StringUtils.equals("TagA", message.getTags())) {
            System.out.println("监听到TagA");
            return LocalTransactionState.COMMIT_MESSAGE;
        }else if (StringUtils.equals("TagB", message.getTags())){
            System.out.println("监听到TagB");
            return LocalTransactionState.ROLLBACK_MESSAGE;
        }else if (StringUtils.equals("TagC", message.getTags())){
            System.out.println("监听到TagC");
            return LocalTransactionState.UNKNOW;
        }
        return LocalTransactionState.UNKNOW;
    }


    // 消息回查方法
    // 引发消息回查的原因最常见的有两个：
    // 1)回调操作返回UNKNWON
    // 2)TC没有接收到TM的最终全局事务确认指令
    @Override
    public LocalTransactionState checkLocalTransaction (MessageExt messageExt) {
        System.out.println("执行消息回查------------");
        return LocalTransactionState.COMMIT_MESSAGE;
    }
    //监听器

}
